package com.ftg.wymall.util;


import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ftg.wymall.comm.vo.CodeStatusEnum;
import com.ftg.wymall.comm.vo.RespMessUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;


/**
 * 通用service封装，用来完成对于sql语句的通用化封装处理
 * 用来处理一些特定复杂的sql语句的变化,或者一些老系统迭代时的语句变化
 * @author kangjx
 * @date 2022/10/27
 */
@SuppressWarnings("all")
@Service
public class ServiceUtil<Vo> {

    private static final Logger log = LoggerFactory.getLogger(ServiceUtil.class);

    @Resource
    MapperUtil mapperUtil;

    /**
     * 通用sql语句封装
     * @param sql   语句
     * @param page  页码
     * @param limit 显示条目
     * @return ResBean 显示数据为map
     */
    public RespMessUtil<IPage> pageUtilForMap(String sql, long page, long limit) {
        log.info("通用复杂sql语句的分页处理,返回list<map>");
        IPage<Map<String, Object>> iPage = new Page(page, limit);
        iPage.setRecords(mapperUtil.pageUtil((page - 1) * limit, limit, sql));
        iPage.setTotal(mapperUtil.countUtil(sql));
        return RespMessUtil.build(CodeStatusEnum.SUCCESS,iPage);
    }

    /**
     * 通用sql语句封装 返回vo的情况，这里改用json转换方式
     * @param sql   语句
     * @param page  页码
     * @param limit 显示条目
     * @return ResBean 显示数据为T  即vo
     */
    public RespMessUtil<IPage> pageUtilForT(String sql, long page, long limit, Class<Vo> c) {
        List<Map<String,Object>> list = mapperUtil.pageUtil((page - 1) * limit, limit, sql);
        List<Vo> list1 = JSON.parseArray(JSON.toJSONString(list),c);
        IPage<Vo> iPage = new Page<>(page, limit);

        iPage.setRecords(list1);
        iPage.setTotal(mapperUtil.countUtil(sql));

        return RespMessUtil.build(CodeStatusEnum.SUCCESS,iPage);
    }

}